git 工作总结

易忘操作

  • 要随时掌握⼯作区的状态,使⽤git status命令。

  • 如果git status告诉你有⽂件被修改过,⽤git diff可以查看修改内容。

  • git log 查看日志

  • 在Git 中,用HEAD表示当前版本,也就是最新的提交,上⼀个版本就是HEAD^,上上⼀个版本就是HEAD^^,当然往上100 个版本写100个^⽐较容易数不过来, 所以写成HEAD~100
  • 回退版本时,使用git reset 命令。git reset --hard HEAD^
  • git reflog 记录每一次命令。

左边是工作区,add 以后是暂存区,然后commit 提交到分支。

撤销修改

git checkout -- file可以丢弃⼯作区的修改.

命令git checkout – readme.txt意思就是,把readme.txt⽂件在⼯作区的修改全部撤销,这 ⾥有两种情况:

⼀种是readme.txt⾃修改后还没有被放到暂存区,现在,撤销修改就回到和版本库⼀模⼀ 样的状态;

⼀种是readme.txt已经添加到暂存区后,⼜作了修改,现在,撤销修改就回到添加到暂存 区后的状态。

总之,就是让这个⽂件回到最近⼀次git commit或git add时的状态。

git checkout – file命令中的“–”很重要,没有“–”,就变成了“创建⼀个新分⽀”的命 令,我们在后⾯的分⽀管理中会再次遇到git checkout命令。

git reset命令既可以回退版本,也可以把暂存区的修改回退到⼯作区。当我们⽤HEAD时, 表⽰最新的版本。

git reset HEAD readme.txt 就可以把暂存区的修改退出工作区。

1
2
read.txt 还没有add ,想丢弃修改,用 git checkout --read.txt
read.txt 已经add了,但是想丢弃修改,用 git reset HEAD readme.txt

git checkout –file其实是⽤版本库⾥的版本替换⼯作区的版本,⽆论⼯作区是修改还是删除,都 可以“⼀键还原”。

远程操作

  • 要关联⼀个远程库,使⽤命令git remote add origin git@server-name:path/repo-name.git;

  • 关联后,使⽤命令git push -u origin master第⼀次推送master分⽀的所有内容;

  • 此后,每次本地提交后,只要有必要,就可以使⽤命令git push origin master推送最新修改;

分支

HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀。

⼀开始的时候,master分⽀是⼀条线,Git⽤master指向最新的提交,再⽤HEAD指向 master,就能确定当前分⽀,以及当前分⽀的提交点:

每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越 来越⻓长。

当我们创建新的分⽀,例如dev时,Git新建了⼀个指针叫dev,指向master相同的提交, 再把HEAD指向dev,就表⽰当前分⽀在dev上:

创建分支 git checkout -b dev创建dev分支,并切换到dev分支。

git checkout命令加上-b参数表⽰创建并切换,相当于以下两条命令:

1
2
git branch dev
git checkout dev

git branch 查看所有分支

现在,我们把dev分⽀的⼯作成果合并到master分⽀上:

1
git merge dev

git merge命令⽤于合并指定分⽀到当前分⽀。

解决冲突

这种情况下不能快速合并分支(直接改变master的位置),git 会进行试图合并。合并完成下面的样子

bug分支

Git还提供了⼀个stash功能,可以把当前⼯作现场“储藏”起来,等以后恢复现场后继续⼯作。

1
2
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge

现在,⽤git status查看⼯作区,就是干净的(除⾮有没有被Git管理的⽂件),因此可以放⼼地创建分⽀来修复bug。

修复完bug后,返回之前的分支,可以看到工作区是干净的,用git stash list查看工作现场。

⼯作现场还在,Git把stash内容存在某个地⽅了,但是需要恢复⼀下,有两个办法: ⼀是⽤git stash apply恢复,但是恢复后,stash内容并不删除,你需要⽤git stash drop来删 除; 另⼀种⽅式是⽤git stash pop,恢复的同时把stash内容也删了。